﻿#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;


//字符串中的第一个唯一字符
//https://leetcode.cn/problems/first-unique-character-in-a-string/
//class Solution {
//public:
//    int firstUniqChar(string s) {
//        int str1[26] = { 0 };
//        int begin = 0;
//        while (begin < s.size())
//        {
//            str1[s[begin] - 'a']++;
//            begin++;
//        }
//        begin = 0;
//        while (begin < s.size())
//        {
//            if (str1[s[begin] - 'a'] == 1)
//            {
//                return begin;
//            }
//            begin++;
//        }
//        return -1;
//    }
//};
//


//字符串相加
//https://leetcode.cn/problems/add-strings/
//class Solution {
//public:
//    string addStrings(string num1, string num2) {
//        int begin1 = num1.size() - 1;
//        int begin2 = num2.size() - 1;
//        int next = 0;
//        int ret = 0;
//        string str1;
//        while (begin1 >= 0 || begin2 >= 0)
//        {
//
//            int number1 = begin1 >= 0 ? num1[begin1] - '0' : 0;
//            int number2 = begin2 >= 0 ? num2[begin2] - '0' : 0;
//            ret = next + number1 + number2;
//            next = ret / 10;
//            ret = ret % 10;
//            str1 += (ret + '0');
//            begin1--;
//            begin2--;
//        }
//        if (next == 1)
//        {
//            str1 += ('1');
//        }
//        reverse(str1.begin(), str1.end());
//        return str1;
//    }
//};




//字符串转整形数字
//https://leetcode.cn/problems/ba-zi-fu-chuan-zhuan-huan-cheng-zheng-shu-lcof/
class Solution {
public:
    int myAtoi(string str) {
        
        int i = 0, n = str.size();
        //sig为符号位
        int sig = 1;

        //跳过空格
        while ( i < n && str[i] == ' ')
        {
            i++;
        }

        //判断是否为负数
        if (str[i] == '-' || str[i] == '+')
        {
           if (str[i] == '-')
               sig = -1;
           //跳过符号位
           i++;
        }
       
        //装数字的容器
        long long ret = 0;


        //开始转换数字
        while (i < n && isdigit(str[i]))
        {
            ret = ret * 10 + (str[i] - '0');

            //判断是否溢出
            if (sig == 1 && ret >= INT_MAX)
            {
                return INT_MAX;
            }
            //判断是否溢出
            if (sig == -1 && -ret <= INT_MIN)
            {
                return INT_MIN;
            }
            i++;
        }
        
        return (int)(ret * sig);
    }
};
